Design Patterns

 

The computer science book Design Patterns: Elements of Reusable Object-Oriented Software (by Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides) has a flock of thoughtful suggestions about how to solve complex problems, starting with:

One thing expert designers know not to do is solve every problem from first principles. Rather, they reuse solutions that have worked for them in the past. When they find a good solution, they use it again and again. Such experience is part of what makes them experts. ...

Specifically, the authors identify four key elements of a useful design pattern. Quoting from Section 1.1:

  • The pattern name is a handle we can use to describe a design problem, its solutions, and consequences in a word or two. Naming a pattern immediately increases our design vocabulary. It lets us design at a higher level of abstraction. Having a vocabulary for patterns lets us talk about them with our colleagues, in our documentation, and even to ourselves. It makes it easier to think about designs and to communicate them and their trade-offs to others. ...
  • The problem describes when to apply the pattern. It explains the problem and its context. ...
  • The solution describes the elements that make up the design, their relationships, responsibilities, and collaborations. ...
  • The consequences are the results and trade-offs of applying the pattern. Though consequences are often unvoiced when we describe design decisions, they are critical for evaluating design alternatives and for understanding the costs and benefits of applying the pattern. ...

In the final "Conclusion" chapter of Design Patterns the authors talk about "The Pattern Community" and the roots of their work, in architecture, from the book A Pattern Language by Christopher Alexander et al. The metaphor of pattern languages, likely, has value in many domains.

(cf. CommonCompSciSense (2002-12-08), ...) - ^z - 2013-12-12